package com.wing.productionPlan.model.response;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.enums.IEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wing.enterprise.product.model.entity.ResBenchmarkBookEchnologyQuality;
import com.wing.mybatis.common.BaseEntity;
import com.wing.productionPlan.model.entity.ProductionProcessMaterial;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 生产开工单
 *
 * @author
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class ProductionWorkOrderDetailVO  implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    public enum Status implements IEnum<Integer> {

        /**
         * 待激活
         */
        toactivate(0, "待激活"),
        /**
         * 生产中
         */
        inproduction(1, "生产中"),
        /**
         * 完成
         */
        accomplish(2, "完成"),
        /**
         * 终止完成
         */
        termination(3, "终止完成");

        private int code;
        private String desc;

        Status(int code, String desc) {
            this.code = code;
            this.desc = desc;
        }

        @Override
        public Integer getValue() {
            return this.code;
        }

        public String getDesc() {
            return this.desc;
        }
    }

    public enum WorkOrderQuality implements IEnum<Integer> {

        /**
         * 打样工单
         */
        temporary(0, "临时计划"),
        /**
         * 按订单
         */
        order(1,"量产订单"),

        /**
         * 成品销售
         */
        finish(2,"成品销售订单"),

        other(99,"其他计划");

        private int code;
        private String desc;

        WorkOrderQuality(int code, String desc) {
            this.code = code;
            this.desc = desc;
        }

        @Override
        public Integer getValue() {
            return this.code;
        }

        public String getDesc() {
            return this.desc;
        }
    }

    /**
     * 创建者
     */
    private Long creator;

    /**
     * 修改者
     */
    private Long modifier;

    /**
     * 创建人
     */
    private String creatorName;

    /**
     * 修改人
     */
    private String modifierName;




    /**
     * 工单编码
     */
    private String code;

    /**
     * 工序id
     */
    private Long processId;

    /**
     * 工序名称
     */
    private String processName;

    /**
     * 生产计划id
     */
    private Long productionPlanId;

    /**
     * 排产记录ID
     */
    private Long productionPlanRecordId;

    /**
     * 工位性质
     */
    private String workstationNatureName;
    private String workstationNature;

    /**
     * 产品编号
     */
    private String skuCode;

    private String skuSpec;

    private String skuName;

    /**
     * 排产数量
     */
    private Integer outputQuantity;

    /**
     * 计划生产数
     */
    private Integer productionQuantity;

    /**
     * 预计开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime predictStartTime;

    /**
     * 预计完成时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime predictFinishTime;

    /**
     * 状态
     */
    private Status status;

    /**
     * 状态描述
     */
    
    private String statusDesc;

    public String getStatusDesc() {
        return status == null ? null : status.getDesc();
    }

    /**
     * 工单性质
     */
    private WorkOrderQuality workOrderQuality;

    /**
     * 工单性质描述
     */
    
    private String workOrderQualityDesc;

    /**
     * 物料id
     */
    private Long productDetailId;

    public String getWorkOrderQualityDesc() {
        return workOrderQuality == null ? null : workOrderQuality.getDesc();
    }

    private Long bookId;

    /**
     * sku列表
     */
    private List<ProductionProcessMaterial> skuList;
    /**
     * 工序成品质检项
     */
    private List<ResBenchmarkBookEchnologyQuality> qualityList;
    /**
     * 设备类型组(工序排产所属 用，隔开)
     */
    private List<DeviceOrWorkVo> deviceTypeList;


    /**
     * 1.普通检测
     * 2.一物一检
     */
    private String qualityNature;
    private String qualityNatureName;

    /**
     * 工序类型 0.首工序 1.过程工序 2末工序
     */
    private String type;
    private String typeName;

    /**
     * 合格数
     */
    private Integer acceptanceQuantity;

    /**
     * 不合格数
     */
    private Integer acceptanceNoQuantity;
    /**
     * 上一道工序合格数
     */
    private Integer previousAcceptanceQuantity;

    /**
     * 报工数
     */
    private Integer reportedQuantity;
    /**
     * 上一道工序报工数
     */
    private Integer previousReportedQuantity;

    /**
     * 报修数
     */

    private Integer repairsQuantity;
    /**
     * 上一道工序报修数
     */
    private Integer previousRepairsQuantity;

    /**
     * 报废数
     */
    private Integer scrapQuantity;
    /**
     * 上一道工序报废数
     */
    private Integer previousScrapQuantity;

    /**
     * 领料数
     */
    private Integer getQuantity;
    /**
     * 上一道工序领料数
     */
    private Integer previousGetQuantity;

    /**
     * 生产计划code
     */
    private String productionPlanCode;

    /**
     * 工序类型
     */
    private String processType;

    /**
     * 内容
     */
    private String content;

    /**
     * 排序
     */
    private Integer sorted;

    /**
     * 报工单位
     */
    private String unitId;


    /**
     * 图纸信息
     */
    private List<DrawInfosVO> drawInfos;
}
